package com.qishi.tablesAndStacksAndQueues;

import java.util.Iterator;

/**
 * 1.MyArrayList 将保持基础数组，数组的容量,以及存储在MyArrayList中的当前项数
 * 2.MyArrayList 将提供一种机制以改变基础数组的容量。通过获得一个新的数组，将老数组的值拷贝到新数组来改变容量，允许虚拟机回收老数组
 * 3.MyArrayList 提供set、get方法
 * 4.MyArrayList 提供一些基础例程，如size 、isEmpty和 clear等这些典型的单行程序；还提供remove以及俩种不同的add，如果数组的数目达到了数组的容量，那么add方法将要扩容
 * 5.MyArrayList 还将提供一个实现Iterator 接口的类，这个类将要存储迭代序列的下一项的下标，并且提供next、haisNext和remove方法
 */
public class MyArrayList<AnyType> implements Iterable<AnyType> {

    /**
     * 默认数组容量
     */
    private static final int DEFAULT_CAPACITY = 10;

    /**
     * 当前的数组长度
     */
    private int theSize;

    /**
     * 数组
     */
    private AnyType[] theItemss;


    public MyArrayList() {
        doClear();
    }

    private void doClear() {
        theSize=10;
        ensureCapacity(DEFAULT_CAPACITY);
    }

    public void ensureCapacity(int newCapacity) {
        if(newCapacity < theSize) {
            return;
        }
        AnyType[] old = theItemss;
        theItemss = (AnyType[]) new Object[newCapacity];
        for (int i = 0; i < size(); i++) {
            theItemss[i] = old[i];
        }
    }

    public int size() {
        return theSize;
    }

    public void add(AnyType anyType) {

    }

    public Iterator<AnyType> iterator() {
        return null;
//        return new ArrayListIterator();
    }
}
